package com.company.aicrawlers.service;

import com.company.aicrawlers.entity.Product;
import com.company.aicrawlers.entity.ProductCompetitor;

import java.util.List;

/**
 * 产品-竞品关联服务接口
 *
 * @author AI Crawlers Team
 * @date 2025-10-10
 */
public interface ProductCompetitorService {
    
    /**
     * 获取我方产品的竞品列表
     *
     * @param ourProductId 我方产品ID
     * @param competitorType 竞争类型（可选：direct/indirect/potential）
     * @param strength 竞争强度（可选：high/medium/low）
     * @return 竞品列表
     */
    List<Product> getCompetitors(Long ourProductId, String competitorType, String strength);
    
    /**
     * 获取竞品对应的我方产品列表（反向查询）
     *
     * @param competitorProductId 竞品ID
     * @return 我方产品列表
     */
    List<Product> getOurProducts(Long competitorProductId);
    
    /**
     * 获取将某竞品作为竞争对手的我方产品列表（带关联信息）
     *
     * @param competitorId 竞品ID
     * @return 我方产品列表（包含关联信息）
     */
    List<Product> getOurProductsByCompetitor(Long competitorId);
    
    /**
     * 配置产品的竞品关系
     *
     * @param ourProductId 我方产品ID
     * @param competitorId 竞品ID
     * @param competitorType 竞争类型
     * @param strength 竞争强度
     * @param dimension 竞争维度
     * @param sortOrder 排序
     * @param remark 备注
     * @return 关联ID
     */
    Long addCompetitorRelation(Long ourProductId, Long competitorId, String competitorType, 
                               String strength, String dimension, Integer sortOrder, String remark);
    
    /**
     * 批量配置产品的竞品
     *
     * @param ourProductId 我方产品ID
     * @param competitors 竞品配置列表
     */
    void batchConfigCompetitors(Long ourProductId, List<ProductCompetitor> competitors);
    
    /**
     * 移除产品-竞品关联
     *
     * @param ourProductId 我方产品ID
     * @param competitorId 竞品ID
     */
    void removeCompetitorRelation(Long ourProductId, Long competitorId);
    
    /**
     * 获取产品的竞品关联详情
     *
     * @param ourProductId 我方产品ID
     * @param competitorId 竞品ID
     * @return 关联对象
     */
    ProductCompetitor getRelation(Long ourProductId, Long competitorId);
    
    /**
     * 更新竞品关联信息
     *
     * @param relation 关联对象
     */
    void updateRelation(ProductCompetitor relation);
}

